#!/bin/bash
# erpc proxy 服务配置
# author    : guyadong
# date      : 2020/10/29
# 导入标志,确保只会被导入一次
proxy_service_config_included=true
# 脚本初始化
[ "$common_init_included" != 'true' ] && . ./common_init.sh
proxy_servicecfg_title='erpc proxy 服务配置'

service_online proxy_service $DEFAULT_PROXY_PORT $proxy_port

function fun_start_proxy_service(){    
    [ $context_proxy_service_configured -eq 0 ] && [ $context_last_code -ne 3 ] && return 4
    [ $context_proxy_service_configured -eq 0 ] && [ $context_last_code -eq 3 ] && return 3
    local defaultno=    
    [ "$proxy_service_enable" = 1 ] && defaultno='--defaultno'

    dialog  --backtitle "$DEFAULT_BACK_TITLE$context_backtitle_suffix" $DLG_YESNO_LABEL \
            --title "$proxy_servicecfg_title" $DLG_BACK_BTN $defaultno \
            --yesno "erpc proxy 服务是独立运行的eRPC协议代理服务,可为嵌入式设备提供基于 ePRC 通讯框架的 facelog 服务访问能力,\
请输入erpc proxy 服务连接参数,你要确保 facelog 服务运行时指定的RPC服务连接可用,否则设备端无法使用erpc proxy 服务访问 facelog\
是否启动 erpc proxy 服务?" 5 30
    local code=$?
    [ $code -lt 2 ] && proxy_service_enable=$code
    return $code
}

# 检查连接参数是否有无效值,有则返回-1,无则返回0
# $1 $port
function _check_proxy_service_params(){
    [[ ! "$1" =~ ^[0-9]{1,5}$      ]] && error_message "端口号(port)不可为空,必须为数字" && return 255
    return 0
}

# 输出 erpc proxy 服务连接参数值
function output_proxy_service_params(){
    echo proxy_port=$proxy_port
    echo proxy_exe=$proxy_exe
}
# 设置 erpc proxy 服务启动参数
# 从 proxy_port 等指向的变量名中读取连接参数作为默认输入
# 对话框结束时回写到对应的变量
# 如果参数无效则一直循环,如果点返回则跳出循环返回3,否则返回0
function fun_proxy_service_port(){
    local port="$proxy_port"
    [ -z "$port" ] && port=$DEFAULT_PROXY_PORT
    while true  ; 
    do 
        # 保存对话框选项的值到$values,如果对话框选项返回,则$values值为'EXIT_$?'
        local values=$(dialog \
            --backtitle "$DEFAULT_BACK_TITLE$context_backtitle_suffix" \
            --title '配置 erpc proxy 服务连接参数' $DLG_BACK_BTN --nocancel \
            --form "指定erpc proxy服务端口号:" 15 66 0 \
                "端口号(port)    :"  1 1 "$port"        1 24 34 0 \
                3>&1 1>&2 2>&3 || echo EXIT_$?)
        
        [[ "$values" =~ EXIT_[0-9] ]] && return ${values##*EXIT_}
        port="$(echo      "$values" | sed -n 1p)"
        ! _check_proxy_service_params "$port"  && continue
        # 按确认按钮时将对话框返回值分别保存到对应的变量中
        proxy_port="$port"
        return 0
    done
}

# 设置 erpc proxy 服务连接参数
# 从 proxy_port 等指向的变量名中读取连接参数作为默认输入
# 对话框结束时回写到对应的变量
# 如果参数无效则一直循环,如果点返回则跳出循环返回3,否则返回0
function fun_proxy_service_exe(){
    local full_selected=off
    local mini_selected=off
    [ "$DEFAULT_PROXY_PORT" = "erpc_proxy"      ] && full_selected=on
    [ "$DEFAULT_PROXY_PORT" = "erpc_proxy_mini" ] && mini_selected=on

    [ "$proxy_exe" = "erpc_proxy"      ] && full_selected=on
    [ "$proxy_exe" = "erpc_proxy_mini" ] && mini_selected=on

    proxy_exe=$(dialog \
        --backtitle "$DEFAULT_BACK_TITLE$context_backtitle_suffix" \
        --title '配置 erpc proxy 服务连接参数' $DLG_BACK_BTN --nocancel \
        --radiolist "选择执行程序:" 12 60 0 \
            "erpc_proxy"  "支持facelog全功能接口" "$full_selected" \
            "erpc_proxy_mini"  "支持facelog裁剪接口" "$mini_selected" \
            3>&1 1>&2 2>&3 || echo EXIT_$?)
    [[ "$proxy_exe" =~ EXIT_[0-9] ]] && return ${proxy_exe##*EXIT_}
    context_proxy_service_configured=0
    return 0
}
function fun_local_proxy_service_connect(){
    [ $proxy_service_online -eq 0 ] && proxy_port=$proxy_service_online_port
    [ $proxy_service_online -ne 0 ] && proxy_port=$DEFAULT_PROXY_PORT
    fun_proxy_service_connect
}

#fun_start_proxy_service
#fun_proxy_service_port
#fun_proxy_service_exe
#output_proxy_service_params